/**
 * Description:
 *
 * @author LiKe
 * @version 1.0.0
 * @date 2022-08-24 10:08
 */

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.ptr.IntByReference;

public interface CardLibrary extends Library {
    // 参数1：只写名称，不写后缀，符合jni规范，可跨平台操作，linux中后缀为so
    CardLibrary INSTANCE = Native.load("Termb", CardLibrary.class);

    /**
     * 本函数用于PC与华视电子第二代居民身份证阅读器的连接
     *
     * @param Port 连接串口（COM1~COM16）或USB口(1001~1016)
     * @return 1 正确 2 端口打开失败 0 动态库加载失败
     */
    int CVR_InitComm(int Port);

    /**
     * 本函数用于关闭PC到阅读器的连接。
     *
     * @return 1 正确 0 错误
     */
    int CVR_CloseComm();

    /**
     * 本函数用于读卡器和卡片之间的合法身份确认。卡认证循环间隔大于300ms。 若卡片放置后发生认证错误时，应移走卡片重新放置。
     *
     * @return 1 正确 卡片认证成功 2 错误 寻卡失败 3 错误 选卡失败 0 错误 初始化失败
     */
    int CVR_Authenticate();

    /**
     * 本函数用于通过阅读器从第二代居民身份证中读取相应信息。卡认证成功以后才可做读卡操作， 读卡完毕若继续读卡应移走二代证卡片重新放置做卡认证。
     * 读卡成功后在termb.dll文件所在路径下生成wz.txt（文字信息）和zp.bmp（照片信息） wz.txt内容示例如下： 张红叶 女 汉
     * 1988-11-18 河北省邯郸市临漳县称勾镇称勾东村复兴路25号 130423198811184328 临漳县公安局
     * 2011.03.30-2021.03.30 读各项文字信息到自定义内存缓冲
     *
     * @param active 兼容以前版本，无实际意义， 1 读取基本信息，2 只读文字信息 ，3 只读最新住址信息，5 芯片管理
     * @return 1 正确 0 错误 99 异常
     */
    int CVR_Read_Content(int active);

    /**
     * 与 int CVR_Read_Content(int active);平级
     * 本函数用于通过阅读器从第二代居民身份证中读取相应信息。卡认证成功以后才可做读卡操作，读卡完毕若继续读卡应移走二代证卡片重新放置做卡认证。
     * 参数： 无
     */
    int CVR_Read_FPContent();

    /**
     * 获取各种信息
     */
    int GetPeopleName(byte[] strTmp, byte[] strLen);

    int GetPeopleSex(byte[] strTmp, byte[] strLen);

    int GetPeopleNation(byte[] strTmp, byte[] strLen);

    int GetPeopleBirthday(byte[] strTmp, byte[] strLen);

    int GetPeopleAddress(byte[] strTmp, byte[] strLen);

    int GetPeopleIDCode(byte[] strTmp, byte[] strLen);

    int GetDepartment(byte[] strTmp, byte[] strLen);

    int GetStartDate(byte[] strTmp, byte[] strLen);

    int GetEndDate(byte[] strTmp, byte[] strLen);

    int GetBMPData(byte[] strTmp, IntByReference strLen);

    int Getbase64BMPData(byte[] strTmp, IntByReference strLen);

    int GetJpgData(byte[] strTmp, IntByReference strLen);

    int CVR_GetSAMID(byte[] strTmp, byte[] strLen);
}

